#!/bin/bash
# 运行鸿蒙一键构建部署脚本（单模块模式）- macOS/Linux Shell版本
# 使用前请确保 hdc 已连接设备，DevEco Studio 工具链已安装

# ================== 可配置变量 ==================
# 项目包名(根据实际项目包名修改!!!!!)
BUNDLE_NAME="com.uinav.myapplication"
# ================== 可配置变量 ==================

# ================== 固定的变量 ==================
# 临时目录名（使用随机字符串避免冲突）
TMP_DIR="hm_deploy_tmp_$(openssl rand -hex 8)"
# HAP 包路径
ENTRY_HAP="entry/build/default/outputs/default/entry-default-unsigned.hap"
# ================== 固定的变量 ==================

# 设置错误时停止执行
set -e

# 颜色输出函数
print_green() {
    echo -e "\033[32m$1\033[0m"
}

print_yellow() {
    echo -e "\033[33m$1\033[0m"
}

print_red() {
    echo -e "\033[31m$1\033[0m"
}

print_cyan() {
    echo -e "\033[36m$1\033[0m"
}

print_gray() {
    echo -e "\033[90m$1\033[0m"
}

# 错误处理函数
handle_error() {
    print_red "❌ 构建部署失败: $1"
    print_red "请检查错误信息并重试"
    exit 1
}

# 主执行流程
main() {
    print_green "1. 安装依赖..."
    if ! ohpm install --all --registry https://ohpm.openharmony.cn/ohpm/ --strict_ssl true; then
        handle_error "依赖安装失败"
    fi

    print_green "2. 构建项目..."
    if ! hvigorw assembleApp; then
        handle_error "项目构建失败"
    fi

    print_green "3. 停止正在运行的应用..."
    if ! hdc shell aa force-stop "$BUNDLE_NAME" 2>/dev/null; then
        print_yellow "应用未运行或停止失败，继续执行..."
    fi

    print_green "4. 创建设备临时目录..."
    print_gray "  执行命令: hdc shell mkdir -p data/local/tmp/$TMP_DIR"
    if ! hdc shell mkdir -p "data/local/tmp/$TMP_DIR"; then
        handle_error "创建设备临时目录失败"
    fi

    print_green "5. 传输 HAP 包到设备..."
    print_cyan "  - 传输 entry.hap..."
    print_gray "  执行命令: hdc file send $ENTRY_HAP data/local/tmp/$TMP_DIR/"
    if ! hdc file send "$ENTRY_HAP" "data/local/tmp/$TMP_DIR/"; then
        handle_error "HAP包传输失败"
    fi

    print_green "6. 安装应用包..."
    if ! hdc shell bm install -p "data/local/tmp/$TMP_DIR"; then
        handle_error "应用包安装失败"
    fi

    print_green "7. 清理设备临时文件..."
    if ! hdc shell rm -rf "data/local/tmp/$TMP_DIR"; then
        print_yellow "清理临时文件失败，但不影响应用运行"
    fi

    print_green "8. 启动应用..."
    if ! hdc shell aa start -a EntryAbility -b "$BUNDLE_NAME" -m entry; then
        handle_error "应用启动失败"
    fi

    print_green "✅ 构建部署完成！应用已成功启动"
}

# 执行主函数
main "$@"